// 第一步 npm install pdf-lib
// 第二步 引入 pdf-lib
import { PDFDocument, rgb ,degrees,StandardFonts} from 'pdf-lib';

/**
 * 给pdf添加水印
 * @param pdfUrl    pdf文件流
 * @param watermark 水印内容
 * @param type 水印类型 1:文字水印 2:图片水印
 * @returns 返回文件流
 */
export async function pdfWatermarking(pdfUrl, watermark, type = '1',opacityValue=1) {

    try {
        // // 加载pdf文件
        const arrayBuffer = await fetchWatermarkFile(pdfUrl);
        // // PDF文件的ArrayBuffer
        console.log(arrayBuffer)
        // 加载PDF文档
        const pdfDoc = await PDFDocument.load(arrayBuffer);
        console.log(pdfDoc)

        // 遍历PDF的每一页
        const pages = pdfDoc.getPages();


        for (let page of pages) {

            const { width, height } = page.getSize();

            if(type == 1){
                const fontSize = 50;
                const text = watermark;
                const textWidth = width * 0.8; // 假设水印宽度占页面宽度的80%
                const textHeight = fontSize * 1.5;

                // 计算文本位置
                const x = (width - textWidth) / 2;
                const y = height - textHeight - 50; // 距离底部50单位
                // 获取默认字体
                // const helveticaFont = await pdfDoc.embedFont(StandardFonts.HelveticaBold);
                // const helveticaFont = await pdfDoc.embedFont(await pdfDoc.embedStandardFont('Helvetica-Bold'));
                // 获取默认字体
                // const helveticaFont = await pdfDoc.embedFont(StandardFonts.Helvetica);
                // 读取本地字体文件
                // Courier : "Courier"
                // CourierBold : "Courier-Bold"
                // CourierBoldOblique : "Courier-BoldOblique"
                // CourierOblique : "Courier-Oblique"
                // Helvetica : "Helvetica"
                // HelveticaBold : "Helvetica-Bold"
                // HelveticaBoldOblique : "Helvetica-BoldOblique"
                // HelveticaOblique : "Helvetica-Oblique"
                // Symbol : "Symbol"
                // TimesRoman : "Times-Roman"
                // TimesRomanBold : "Times-Bold"
                // TimesRomanBoldItalic : "Times-BoldItalic"
                // TimesRomanItalic : "Times-Italic"
                // ZapfDingbats : "ZapfDingbats"
                // 嵌入中文字体，这里假设您已经有合适的中文字体文件
                console.log(StandardFonts)
                // // 加载pdf文件
                // const font = await fetchWatermarkFile(' http://192.168.0.19:8080/assets/font/xingti.ttf');
                const helveticaFont = await pdfDoc.embedFont(StandardFonts.HelveticaBold);
                console.log(text,helveticaFont)
                // 添加文本水印
                page.drawText(text, {
                    x,
                    y,
                    size: fontSize,
                    color: rgb(0.95, 0.1, 0.1), // 红色
                    rotate: degrees(45), // 旋转45度
                    font: helveticaFont,
                    opacity: opacityValue  // 设置不透明度
                });
            }else{
                // 加载水印图片
                const imgData = await fetchWatermarkFile(watermark)
                console.log(imgData);
                // 加载图片水印
                const image = await pdfDoc.embedPng(imgData);
                console.log(image)
                const imgWidth = image.width * 0.5; // 假设水印宽度占页面宽度的80%
                const imgHeight = image.height * 0.5;


                // 计算图片水印的位置（这里居中放置）
                const x = (width -  imgWidth) / 2;
                const y = (height - imgHeight) / 2;
                // 在页面上绘制图片水印
                page.drawImage(image, {
                    x,
                    y,
                    width:  imgWidth,
                    height: imgWidth,
                    opacity: opacityValue  // 设置不透明度
                });
            }

        }
        // 序列化PDF文档为ArrayBuffer
        const pdfBytes = await pdfDoc.save();
        console.log(pdfBytes)
        return pdfBytes;
    }catch (e) {
        console.error('Error adding watermark:', e);
    }
}

/**
 * 返回文件ArrayBuffer
 * @param url
 * @returns {Promise<ArrayBuffer>}
 */
export async function fetchWatermarkFile (url) {
    // 这里应该是你URL
    const response = await fetch(url); // 获取文件
    const arrayBuffer = await response.arrayBuffer(); // 转换为ArrayBuffer
    return arrayBuffer; //返回
}

/**
 * 打印pdf
 * @param res
 */
export function printPdfDocument(res){
    const blob = new Blob([res], { type: 'application/pdf' });
    const date = new Date().getTime();
    const ifr = document.createElement('iframe');
    ifr.style.display = 'none';
    ifr.style.frameborder = 'no';
    ifr.style.pageBreakBefore = 'always';
    ifr.setAttribute('id', 'pdfIframe'+date);
    ifr.setAttribute('name', 'pdfIframe'+date);
    ifr.src = window.URL.createObjectURL(blob);
    document.body.appendChild(ifr);
    const ordonnance = document.getElementById('pdfIframe'+date).contentWindow;
    setTimeout(function(){ ordonnance.print(); }, 100);
    window.URL.revokeObjectURL(ifr.src);
}
